package org.mbcorp.sar.dao;

import java.util.Date;
import java.util.List;

import org.mbcorp.sar.model.Solicitud;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface SolicitudDAO extends JpaRepository<Solicitud, Integer> {
	
	@Query("SELECT s FROM Solicitud s, Solicitante a  WHERE s.areaSolicitante.id = :area AND s.estado = :estado AND s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPorAreaEstadoFecha(@Param("area") Integer area, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("estado")String estado, @Param("login")String loginSolicitanteActual);

	@Query("SELECT s FROM Solicitud s, Solicitante a  WHERE s.areaSolicitante.id = :area AND s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPorAreaFecha(@Param("area") Integer area, @Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("login")String loginSolicitanteActual);
	
	@Query("SELECT s FROM Solicitud s, Solicitante a  WHERE s.estado = :estado AND s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPorEstadoFecha(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("estado")String estado, @Param("login")String loginSolicitanteActual);
	
	@Query("SELECT s FROM Solicitud s, Solicitante a WHERE s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPorFecha(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("login")String loginSolicitanteActual);
	
	@Query("SELECT s FROM Solicitud s, Solicitante a WHERE s.id = :id AND a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPorId(@Param("id")Integer id, @Param("login")String loginSolicitanteActual);
	
	@Query("SELECT s FROM Solicitud s WHERE s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND s.flagEstimado = TRUE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorFechaEstimado(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin);		

	@Query("SELECT s FROM Solicitud s WHERE s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND (s.solicitante.cliente.razonSocial like %:cliente% OR s.solicitante.cliente.nombreComercial like %:cliente% ) AND s.flagEstimado = TRUE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorClienteFechaEstimado(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("cliente")String cliente);
	
	@Query("SELECT s FROM Solicitud s WHERE s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND s.flagEstimado = TRUE AND s.flagReprogramar = FALSE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorFechaEstimadoNP(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin);		

	@Query("SELECT s FROM Solicitud s WHERE (s.solicitante.cliente.razonSocial like %:cliente% OR s.solicitante.cliente.nombreComercial like %:cliente% ) AND s.flagEstimado = TRUE AND s.flagReprogramar = FALSE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorClienteNP(@Param("cliente")String cliente);

	@Query("SELECT s FROM Solicitud s WHERE s.fechaRegistro BETWEEN :fechainicio AND :fechafin AND (s.solicitante.cliente.razonSocial like %:cliente% OR s.solicitante.cliente.nombreComercial like %:cliente% ) AND s.flagEstimado = TRUE AND s.flagReprogramar = FALSE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorClienteFechaEstimadoNP(@Param("fechainicio")Date fechaInicio, @Param("fechafin")Date fechaFin, @Param("cliente")String cliente);
	
	@Query("SELECT s FROM Solicitud s WHERE s.flagEstimado = TRUE AND s.flagReprogramar = FALSE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPorNP();
	
	@Query("SELECT s FROM Solicitud s WHERE s.flagEstimado = TRUE AND s.flagReprogramar = TRUE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarPrioritarios();
	
	@Query("SELECT s FROM Solicitud s WHERE s.flagProgramado = TRUE AND s.flagBaja = FALSE")
	public List<Solicitud> buscarProgramados();
	
	@Query("SELECT s FROM Solicitud s, Solicitante a WHERE s.flagProgramado = TRUE AND s.flagAprobado = FALSE AND s.flagBaja = FALSE AND s.flagReprogramar = FALSE AND  a.login = :login AND s.solicitante.cliente = a.cliente")
    public List<Solicitud> buscarPendientesAprobacionProgramacion(@Param("login")String loginSolicitanteActual);
}


